import dayjs from '@/uni_modules/uv-ui-tools/libs/util/dayjs';
// 验证手机号码
export function validatePhoneNumber(data) {
  var reg = /^1[3-9]\d{9}$/;
  return reg.test(data);
}

export function lastfour(num) {
  // 截取后4位
  let lastFourDigits = num.slice(-4);
  return lastFourDigits;
}

export function isValidBankCard(cardNumber) {
  const reg = /^(\d{16}|\d{19})$/;
  // 使用正则表达式测试银行卡号
  return reg.test(cardNumber);
}

/**
 * 将时间转换为 `几秒前`、`几分钟前`、`几小时前`、`几天前`
 * @param param 当前时间，new Date() 格式或者字符串时间格式
 * @param format 需要转换的时间格式字符串
 * @description param 10秒：  10 * 1000
 * @description param 1分：   60 * 1000
 * @description param 1小时： 60 * 60 * 1000
 * @description param 24小时：60 * 60 * 24 * 1000
 * @description param 3天：   60 * 60* 24 * 1000 * 3
 * @returns 返回拼接后的时间字符串
 */
export function formatPast(param, format = 'YYYY-mm-dd HH:MM:SS') {
  if (!param) return '从未下单';
  // 传入格式处理、存储转换值
  let t, s;
  // 获取js 时间戳
  let time = new Date().getTime();
  // 是否是对象
  typeof param === 'string' || 'object'
    ? (t = new Date(param).getTime())
    : (t = param);
  // 当前时间戳 - 传入时间戳
  time = Number.parseInt(`${time - t}`);
  if (time < 10000) {
    // 10秒内
    return '刚刚' + '下单';
  } else if (time < 60000 && time >= 10000) {
    // 超过10秒少于1分钟内
    s = Math.floor(time / 1000);
    return `${s}秒前` + '下单';
  } else if (time < 3600000 && time >= 60000) {
    // 超过1分钟少于1小时
    s = Math.floor(time / 60000);
    return `${s}分钟前` + '下单';
  } else if (time < 86400000 && time >= 3600000) {
    // 超过1小时少于24小时
    s = Math.floor(time / 3600000);
    return `${s}小时前` + '下单';
  } else if (time < 259200000 && time >= 86400000) {
    // 超过1天少于3天内
    s = Math.floor(time / 86400000);
    return `${s}天前` + '下单';
  } else {
    // 超过3天
    const date =
      typeof param === 'string' || 'object' ? new Date(param) : param;
    return formatDateTime(param) + '下单';
  }
}

export function formatTime(time) {
  if (typeof time !== 'number' || time < 0) {
    return time;
  }

  var hour = parseInt(time / 3600);
  time = time % 3600;
  var minute = parseInt(time / 60);
  time = time % 60;
  var second = time;

  return [hour, minute, second]
    .map(function (n) {
      n = n.toString();
      return n[1] ? n : '0' + n;
    })
    .join(':');
}

export function formatDateTime(date, fmt = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) {
    return '';
  }
  return dayjs(date).format(fmt);
}

export function formatLocation(longitude, latitude) {
  if (typeof longitude === 'string' && typeof latitude === 'string') {
    longitude = parseFloat(longitude);
    latitude = parseFloat(latitude);
  }

  longitude = longitude.toFixed(2);
  latitude = latitude.toFixed(2);

  return {
    longitude: longitude.toString().split('.'),
    latitude: latitude.toString().split('.'),
  };
}

var dateUtils = {
  UNITS: {
    年: 31557600000,
    月: 2629800000,
    天: 86400000,
    小时: 3600000,
    分钟: 60000,
    秒: 1000,
  },
  humanize: function (milliseconds) {
    var humanize = '';
    for (var key in this.UNITS) {
      if (milliseconds >= this.UNITS[key]) {
        humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
        break;
      }
    }
    return humanize || '刚刚';
  },
  format: function (dateStr) {
    var date = this.parse(dateStr);
    var diff = Date.now() - date.getTime();
    if (diff < this.UNITS['天']) {
      return this.humanize(diff);
    }
    var _format = function (number) {
      return number < 10 ? '0' + number : number;
    };
    return (
      date.getFullYear() +
      '/' +
      _format(date.getMonth() + 1) +
      '/' +
      _format(date.getDate()) +
      '-' +
      _format(date.getHours()) +
      ':' +
      _format(date.getMinutes())
    );
  },
  parse: function (str) {
    //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
    var a = str.split(/[^0-9]/);
    return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
  },
};

// 返回上一页
export function prePage(page = null) {
  let pages = getCurrentPages();
  //console.log('pages:',pages);
  let prePage = pages[pages.length - 2];
  if (page !== null) {
    prePage = pages[page];
  }
  // #ifdef H5
  return prePage;
  // #endif
  return prePage.$vm;
}

export function kmUnit(m) {
  var v;
  if (typeof m === 'number' && !isNaN(m)) {
    if (m >= 1000) {
      v = (m / 1000).toFixed(2) + 'km';
    } else {
      v = m + 'm';
    }
  } else {
    v = '0m';
  }
  return v;
}

export function isWeixin() {
  if (
    navigator &&
    navigator.userAgent &&
    navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
  ) {
    return true;
  }
  return false;
}

export function parseQuery() {
  let res = {};

  // #ifdef H5
  const query = (location.href.split('?')[1] || '')
    .trim()
    .replace(/^(\?|#|&)/, '');

  if (!query) {
    return res;
  }

  query.split('&').forEach((param) => {
    const parts = param.replace(/\+/g, ' ').split('=');
    const key = decodeURIComponent(parts.shift());
    const val = parts.length > 0 ? decodeURIComponent(parts.join('=')) : null;

    if (res[key] === undefined) {
      res[key] = val;
    } else if (Array.isArray(res[key])) {
      res[key].push(val);
    } else {
      res[key] = [res[key], val];
    }
  });
  // #endif
  // #ifndef H5
  var pages = getCurrentPages(); //获取加载的页面
  var currentPage = pages[pages.length - 1]; //获取当前页面的对象
  var url = currentPage.route; //当前页面url
  res = currentPage.options; //如果要获取url中所带的参数可以查看options
  // #endif

  return res;
}

export function urlDecode(query) {
  if (!query) return null;
  let hash,
    object = {};
  const hashes = query.slice(query.indexOf('?') + 1).split('&');
  for (let i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    object[hash[0]] = hash[1];
  }

  return object;
}

/**
 * 将值复制到目标对象，且以目标对象属性为准，例：target: {a:1} source:{a:2,b:3} 结果为：{a:2}
 * @param target 目标对象
 * @param source 源对象
 */
export const copyValueToTarget = (target, source) => {
  const newObj = Object.assign({}, target, source);
  // 删除多余属性
  Object.keys(newObj).forEach((key) => {
    // 如果不是target中的属性则删除
    if (Object.keys(target).indexOf(key) === -1) {
      delete newObj[key];
    }
  });
  // 更新目标对象值
  Object.assign(target, newObj);
};
